package com.i2bt.app.files.model;

import com.i2bt.bean.FileInfoBean;

import android.os.Environment;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * 
 * Title : 安卓本地文件读取类
 *
 * Description : 可以单步进入, 单步退出 并可返回文件列表
 *
 * CreatedTime : 2014-8-27
 *
 * @author wuliao & kakaxi & yi
 *
 * @version 1.0
 *
 */

public class AndroidLocalFilesReader {
	
	private File root;	// 首目录
	
	private File filesPath; // 文件路径
	
	public String currentPath; // 当前路径
	
	private List<FileInfoBean> filesList; //文件列表
	
	private boolean isFileter; // 是否过滤文件
	
	public AndroidLocalFilesReader() {
		this(false);
	}
	
	public AndroidLocalFilesReader(boolean isFileter) {
		//初始化首目录和当前路径
		root = Environment.getExternalStorageDirectory();
		currentPath = new String();
		this.isFileter = isFileter;
	}
	
	/**
	 * 进入目录或者刷新目录
	 * @param enterFilesName 要进入的目录名
	 * @param isFileter 是否过滤文件
	 * @return
	 */
	public List<FileInfoBean> enterSDCardFiles(String enterFilesName) {
		if (enterFilesName == null || enterFilesName.trim().equals("")) {
			// 当进入的文件名为空或者空指针就会刷新当前的目录
			currentPath += "";
		}
		else {
			// 进入指定的目录中
			currentPath += File.separatorChar + enterFilesName;
		}
		
		//构造文件路径后,传入路径读取文件列表
		filesPath = new File(root, currentPath);
		readFilesToList(filesPath);
				
		return filesList;
	}
	
	/**
	 * 后退目录
	 * @return
	 */
	public List<FileInfoBean> backSDCardFiles() {
		if (currentPath.trim().equals("")) {
			currentPath += "";
		}
		else {
			int separatorLastIndex = currentPath.lastIndexOf(File.separatorChar);
			currentPath = currentPath.substring(0, separatorLastIndex);
		}
		
		//构造文件路径后,传入路径读取文件列表
		filesPath = new File(root, currentPath);
		readFilesToList(filesPath);
		
		return filesList;
	}
	
	/**
	 * 读取文件转成文件信息列表
	 * @param filePath 文件路径
	 * @param isFileter 是否过滤文件
	 */
	private void readFilesToList(File filePath) {
		filesList = new ArrayList<FileInfoBean>();
		// 获取文件数组,并打包成bean添加到文件列表中
		File[] files = filesPath.listFiles();
		for (File file : files) {
			//有过滤文件夹就把文件去掉
			if (isFileter) {
				if (file.isFile()) continue;
			}
			FileInfoBean fileInfoBean = wrapToFileInfoBean(file);
			filesList.add(fileInfoBean);
		}
	}
	
	/**
	 * 把文件打包成文件信息类
	 * @param file 文件
	 * @return 文件信息类
	 */
	private FileInfoBean wrapToFileInfoBean(File file) {
		FileInfoBean fileInfoBean = new FileInfoBean();
		fileInfoBean.setFileName(file.getName());
		fileInfoBean.setFileLength(file.length());
		fileInfoBean.setFile(file.isFile());
		return fileInfoBean;
	}
	
	/**
	 * 获取当前路径
	 * @return
	 */
	public String getCurrentPath () {
		return root.getAbsolutePath() + currentPath;
	}

	public boolean isFileter() {
		return isFileter;
	}

	public void setFileter(boolean isFileter) {
		this.isFileter = isFileter;
	}
	
}
